#include <iostream>
#include <string>

using namespace std;

int n, m;
string map[100];
bool vis[110][110];
  
bool in(int x, int y) {
    return 0 <= x && x < n && 0 <= y && y < m;
}

bool dfs(int x, int y) {
    if(map[x][y] == 'T') {
        return true;
    }

    vis[x][y] = 1;  // 标记
    map[x][y] = 'm';

    // 向上
    int tx = x - 1, ty = y;
    if(in(tx, ty) && map[tx][ty] != '*' && !vis[tx][ty]) {   // 先判断是否在范围内
        if(dfs(tx, ty)) {
            return true;
        }
    }

    // 左走
    tx = x, ty = y - 1;
    if(in(tx, ty) && map[tx][ty] != '*' && !vis[tx][ty]) {   // 先判断是否在范围内
        if(dfs(tx, ty)) {
            return true;
        }
    }

    // 下走
    tx = x + 1, ty = y;
    if(in(tx, ty) && map[tx][ty] != '*' && !vis[tx][ty]) {   // 先判断是否在范围内
        if(dfs(tx, ty)) {
            return true;
        }
    }

    // 右走
    tx = x, ty = y + 1;
    if(in(tx, ty) && map[tx][ty] != '*' && !vis[tx][ty]) {   // 先判断是否在范围内
        if(dfs(tx, ty)) {
            return true;
        }
    }

    vis[x][y] = 0;     // 取消标记
    map[x][y] = '.';  // 搜索失败，标记为 .

    return false;
}

int main()
{
    // 输入迷宫地图
    cin >> n >> m;
    for(int i = 0; i < n; i++) {
        cin >> map[i];
    }

    // 找到起始点
    int x, y;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if('S' == map[i][j]) {
                x = i;
                y = j;
            }
        }
    }
    
    if(dfs(x, y)) {
        for(int i = 0; i < n; i++) {
            cout << map[i] << endl;
        }
    } else {
        cout << "No" << endl;
    }
    
    return 0;
}

